From d0da82fed64b61dcf3476516464794598ca99e69 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 24 Feb 2014 14:51:27 +0100 Subject: [PATCH] gtk: Remove propagation limit of captured events on the grab widget Now, all captured events run from the toplevel to the deepmost widget, regardless of GTK+ grabs. This makes captured events more useful to event controllers if used together in the hierarchy with widgets doing old fashioned event handling and GTK+ grabs. --- gtk/gtkmain.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 16a071241b..9b9bfc3d80 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1508,7 +1508,6 @@ gtk_main_do_event (GdkEvent *event) { GtkWidget *event_widget; GtkWidget *grab_widget = NULL; - GtkWidget *topmost_widget = NULL; GtkWindowGroup *window_group; GdkEvent *rewritten_event = NULL; GdkDevice *device; @@ -1574,14 +1573,6 @@ gtk_main_do_event (GdkEvent *event) if (!grab_widget) grab_widget = gtk_window_group_get_current_grab (window_group); - /* Find out the topmost widget where captured event propagation - * should start, which is the widget holding the GTK+ grab - * if any, otherwise it's left NULL and events are emitted - * from the toplevel (or topmost parentless parent). - */ - if (grab_widget) - topmost_widget = grab_widget; - /* If the grab widget is an ancestor of the event widget * then we send the event to the original event widget. * This is the key to implementing modality. @@ -1695,7 +1686,7 @@ gtk_main_do_event (GdkEvent *event) case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: case GDK_TOUCH_BEGIN: - if (!_gtk_propagate_captured_event (grab_widget, event, topmost_widget)) + if (!_gtk_propagate_captured_event (grab_widget, event, NULL)) gtk_propagate_event (grab_widget, event); break; @@ -1743,19 +1734,19 @@ gtk_main_do_event (GdkEvent *event) case GDK_TOUCH_UPDATE: case GDK_TOUCH_END: case GDK_TOUCH_CANCEL: - if (!_gtk_propagate_captured_event (grab_widget, event, topmost_widget)) + if (!_gtk_propagate_captured_event (grab_widget, event, NULL)) gtk_propagate_event (grab_widget, event); break; case GDK_ENTER_NOTIFY: if (gtk_widget_is_sensitive (grab_widget) && - !_gtk_propagate_captured_event (grab_widget, event, topmost_widget)) + !_gtk_propagate_captured_event (grab_widget, event, NULL)) gtk_widget_event (grab_widget, event); break; case GDK_LEAVE_NOTIFY: if (gtk_widget_is_sensitive (grab_widget) && - !_gtk_propagate_captured_event (grab_widget, event, topmost_widget)) + !_gtk_propagate_captured_event (grab_widget, event, NULL)) gtk_widget_event (grab_widget, event); break; -- 2.30.2